﻿using System;
using System.Collections.Generic;
using System.Linq;
using Kaesoft.Hospedaje.Common;
using Kaesoft.Hospedaje.Entities;

namespace Kaesoft.Hospedaje.Shell
{
    public class MarcoTrabajoViewModel : ViewModelBase
    {
        private Usuario _usuario;

        public Usuario Usuario
        {
            get { return _usuario; }
            set
            {
                _usuario = value; OnPropertyChanged("Usuario");
            }
        }
        private List<Opcion> _opciones;
        private List<PerfilOpcion> _perfilOpciones;
        private RelayCommand _abrirOpcion;
        private Opcion _tabSeleccionado;
        private PanelErroresViewModel _panelErroresViewModel;

        public ViewModelBase WorkspaceActual { get; internal set; }

        public PanelErroresViewModel PanelErroresViewModel
        {
            get { return _panelErroresViewModel; }
            set
            {
                if (value != _panelErroresViewModel)
                {
                    _panelErroresViewModel = value;
                    OnPropertyChanged("PanelErroresViewModel");
                }
            }
        }

        public Opcion TabSeleccionado
        {
            get { return _tabSeleccionado; }
            set
            {
                if (this._tabSeleccionado != value)
                {
                    this._tabSeleccionado = value;
                    OnPropertyChanged("TabSeleccionado");
                }
            }
        }

        public RelayCommand AbrirOpcion
        {
            get { return _abrirOpcion ?? (_abrirOpcion = new RelayCommand(AbrirOpcionMenu)); }
        }

        public List<Opcion> Opciones
        {
            get { return _opciones; }
            set
            {
                _opciones = value;
                this.OnPropertyChanged("Opciones");
            }
        }

        private void AbrirOpcionMenu(object parameter)
        {
        }

        public MarcoTrabajoViewModel()
        {
            PanelErroresViewModel = new PanelErroresViewModel();

            try
            {
                if (!Design.IsInDesignModeStatic)
                {
                    List<Opcion> opciones = new List<Opcion>();
                    _usuario = Caching.Instancia.UsuarioSistema;
                    _perfilOpciones = _usuario.UsuarioPerfils[0].Perfil.PerfilOpcions.ToList();

                    foreach (PerfilOpcion perfilOpcion in _perfilOpciones.Where(a => a.Opcion.idPadre == null))
                    {
                        opciones.Add(ObtenerNodos(perfilOpcion.Opcion));
                    }

                    Opciones = opciones;
                    this.TabSeleccionado = Opciones.First();
                }
            }
            catch (Exception)
            {

            }
        }

        private Opcion ObtenerNodos(Opcion opcionPadre)
        {
            foreach (PerfilOpcion perfilOpcion in _perfilOpciones.Where(a => a.Opcion.idPadre == opcionPadre.idOpcion))
            {
                opcionPadre.Opcion1.Add(ObtenerNodos(perfilOpcion.Opcion));
            }

            return opcionPadre;
        }
    }
}